小明在設計了去中心化交易所得基本資料結構後,今天接著研究如何透過智能合約的事件機制,讓前端 UI 能夠得知智能合約的異動或處理完成的結果。
簡單來說,事件可以想成是紀錄智能合約執行的日誌。當交易完成時,事件發送的日誌可以一起被儲存在區塊鏈中。但智能合約內無法直接訪問這些資料,只能透過外部調用。因此在 DApps 中可以透過 Web3.js 讓前端監聽事件,如此便可達成讓智能合約內呼叫前端的一種途徑。
//管理功能之事件
event TokenAddedToSystem(uint _symbolIndex, string _token, uint _timestamp);
//用戶提領幣之事件
event DepositForTokenReceived(address indexed _from, uint indexed _symbolIndex, uint _amount, uint _timestamp);
event WithdrawalToken(address indexed _to, uint indexed _symbolIndex, uint _amount, uint _timestamp);
event DepositForEthReceived(address indexed _from, uint _amount, uint _timestamp);
event WithdrawalEth(address indexed _to, uint _amount, uint _timestamp);
//用戶買賣取消掛單之事件
event LimitSellOrderCreated(uint indexed _symbolIndex, address indexed _who, uint _amountTokens, uint _priceInWei, uint _orderKey);
event SellOrderFulfilled(uint indexed _symbolIndex, uint _amount, uint _priceInWei, uint _orderKey);
event SellOrderCanceled(uint indexed _symbolIndex, uint _priceInWei, uint _orderKey);
event LimitBuyOrderCreated(uint indexed _symbolIndex, address indexed _who, uint _amountTokens, uint _priceInWei, uint _orderKey);
event BuyOrderFulfilled(uint indexed _symbolIndex, uint _amount, uint _priceInWei, uint _orderKey);
event BuyOrderCanceled(uint indexed _symbolIndex, uint _priceInWei, uint _orderKey);
本文同時發佈於作者部落格:https://www.bdetw.com/blog
想找區塊鏈人才或想學習區塊鏈知識的夥伴。歡迎參加社群小聚,一起來輕鬆交流、互相學習成長、認識新朋友、發現新機會!
台北區塊鏈社群
https://bitlly.co/Q4dIK
BDE 區塊鏈學院 - 提供專業的區塊鏈培訓與顧問服務。
https://bitlly.co/mbDwX